package com.joizhang.seckill.api.service;

import com.joizhang.seckill.api.kafka.SecKillMessage;
import com.joizhang.seckill.api.redis.GoodsKey;
import com.joizhang.seckill.api.vo.SecKillGoodsVo;
import com.joizhang.seckill.api.vo.UserVo;

public interface SecKillService {

    /**
     * 秒杀消息入队
     * @param secKillMessage 秒杀消息
     * @return success
     */
    Boolean sendSecKillMessage(SecKillMessage secKillMessage);

    /**
     * 处理秒杀消息
     * @param secKillMessage 秒杀消息
     */
    void handleSecKillMessage(SecKillMessage secKillMessage);

    /**
     * 预减库存
     */
    Long decrement(GoodsKey getGoodsStock, String s);

    /**
     * <pre>
     * 保证这三个操作:
     * 1 减库存
     * 2 下订单
     * 3 写入秒杀订单是一个事物
     * </pre>
     */
    void secKill(UserVo user, SecKillGoodsVo goods);

    Long getSecKillResult(UserVo userVo, Long goodsId);
}
